home *** CD-ROM | disk | FTP | other *** search
- /* SymbolList.c */
- /*****************************************************************************/
- /* */
- /* Out Of Phase: Digital Music Synthesis on General Purpose Computers */
- /* Copyright (C) 1994 Thomas R. Lawrence */
- /* */
- /* This program is free software; you can redistribute it and/or modify */
- /* it under the terms of the GNU General Public License as published by */
- /* the Free Software Foundation; either version 2 of the License, or */
- /* (at your option) any later version. */
- /* */
- /* This program is distributed in the hope that it will be useful, */
- /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
- /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
- /* GNU General Public License for more details. */
- /* */
- /* You should have received a copy of the GNU General Public License */
- /* along with this program; if not, write to the Free Software */
- /* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
- /* */
- /* Thomas R. Lawrence can be reached at tomlaw@world.std.com. */
- /* */
- /*****************************************************************************/
-
- #include "MiscInfo.h"
- #include "Audit.h"
- #include "Debug.h"
- #include "Definitions.h"
-
- #include "SymbolList.h"
- #include "TrashTracker.h"
- #include "Memory.h"
-
-
- struct SymbolListRec
- {
- struct SymbolRec* First;
- SymbolListRec* Rest;
- };
-
-
- /* cons operation for a symbol list */
- SymbolListRec* SymbolListCons(struct SymbolRec* First, SymbolListRec* Rest,
- struct TrashTrackRec* TrashTracker)
- {
- SymbolListRec* NewConsCell;
-
- if (First != NIL)
- {
- CheckPtrExistence(First);
- }
- if (Rest != NIL)
- {
- CheckPtrExistence(Rest);
- }
-
- NewConsCell = (SymbolListRec*)AllocTrackedBlock(sizeof(SymbolListRec),TrashTracker);
- if (NewConsCell == NIL)
- {
- return NIL;
- }
- SetTag(NewConsCell,"SymbolListRec");
-
- NewConsCell->First = First;
- NewConsCell->Rest = Rest;
-
- return NewConsCell;
- }
-
-
- /* get the first entry from the symbol list */
- struct SymbolRec* GetFirstFromSymbolList(SymbolListRec* ListEntry)
- {
- CheckPtrExistence(ListEntry);
- return ListEntry->First;
- }
-
-
- /* get the rest list from the symbol list */
- SymbolListRec* GetRestListFromSymbolList(SymbolListRec* ListEntry)
- {
- CheckPtrExistence(ListEntry);
- return ListEntry->Rest;
- }
-
-
- /* get the length of the symbol list */
- long GetSymbolListLength(SymbolListRec* ListEntry)
- {
- if (ListEntry == NIL)
- {
- return 0;
- }
- else
- {
- CheckPtrExistence(ListEntry);
- return 1 + GetSymbolListLength(ListEntry->Rest);
- }
- }
-